package com.lyl.mp.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

/**
 * @ClassName MybatisPlusGenerator
 * @DESCRIPTION TODO
 * @Author lvxiaobu
 * @Date 2023/2/21 17:22
 **/
public class MybatisPlusGenerator {

    // 数据库信息, 按需修改
    public final static String driver = "com.mysql.jdbc.Driver";
    public final static String url = "jdbc:mysql://192.168.20.128:3306/demo_mybatisplus?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true";
    public final static String username = "root";
    public final static String password = "123456";
    public final static String author = "lvxiaobu";

    // 输出文件的根目录,一般无需修改,当前值是：当前文件所在项目的根目录,如：F:\IntelliJIDEA\workspace\demo\mybatis-plus3\src\main\java
    public final static String outputDir = System.getProperty("user.dir")+"\\src\\main\\java";

    // 根目录下，各层级的包名，按需修改
    public final static String parentPackage = "com.lyl.mp";  // 项目下的基础包名
    public final static String modulePackage = "mybatisplus"; // 生成mybatisPlus项目所在的父级包名
    public final static String entityPackage = "entity";      // mybatisPlus 实体类项目所在包名
    public final static String servicePackage = "service";    // 接口 所在包名
    public final static String implPackage = "service.impl";  // 实现类 所在包名
    public final static String mapperPackage = "mapper";      // mapper 所在包名
    public final static String xmlPackage = "mapper.xml";     // mapper.xml 所在包名
    public final static String controllerPackage = "controller"; // controller 所在包名

    public final static String targetTableNames = "ls_hw_mstp_eth_eq_over_sdh,student";  // 需要生成代码的表名


    public static void main(String[] args) {

        FastAutoGenerator.create(url, username, password)
                // 全局设置
                .globalConfig(builder -> {
                            // 设置作者
                    builder.author(author)
                            // 指定输出目录的总目录
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir(outputDir);
                })
                // 文件生成outputDir路径下的包设置
                .packageConfig(builder -> {
                            // 设置实体类、service、mapper包所在的父包名
                    builder.parent(parentPackage)
                            // 设置父包模块名
                            .moduleName(modulePackage)
                            .entity(entityPackage) // 实体类名称
                            .service(servicePackage)
                            .serviceImpl(implPackage)
                            .mapper(mapperPackage)
                            .controller(controllerPackage)
                            // 设置mapperXml生成路径,优先级一
//                            .pathInfo(Collections.singletonMap(OutputFile.xml,"E:\\software\\ideaworkspace\\case\\mybatisPlus3\\src\\main\\java"));
                            // 设置mapperXml生成路径,优先级二
                            .xml(xmlPackage);
                })
                // 代码生成策略设置
                .strategyConfig(builder -> {
                    builder.addInclude(targetTableNames) // 设置需要生成的表名
                            // 设置过滤表前缀
                            .addTablePrefix("t_", "c_");
                    //设置实体类的生成策略
                    builder.entityBuilder().enableLombok() // 开启lomBok注解
                                           .fileOverride() // 开启文件覆盖
//                                           .enableRemoveIsPrefix()  // 开启boolean类型移除前缀is
                                           .build();

                    //mapper注解
                    builder.mapperBuilder().fileOverride()  //开启覆盖
                                           .enableBaseColumnList()
                                           .enableBaseResultMap()
//                                           .enableMapperAnnotation()   // 自动生成@Mapper注解
//                                           .formatMapperFileName("%Dao") //格式化mapper文件名称为*Dao
//                                           .formatXmlFileName("%Xml")  // 格式化XML文件名称为*Xml
                                           .build();
                                                // 开启驼峰转连字符
                    builder.controllerBuilder().enableHyphenStyle().build();
//                                                // 开启生成@RestController 控制器
//                                                .enableRestStyle();

                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
            }
}
